package controllers

import (
	// "database/sql"
	"encoding/json"
	// "errors"
	"fmt"
	"net/http"
	// "test/model"
	"net/rpc"
	"os"
	// "reflect"
	"strconv"
	// _ "test/mysql"
)

/*
*return a json file
 */
// fmt.Println("11")

var gerr error

var pClient *rpc.Client

// func GetInstance() *rpc.Client {
// 	if pClient == nil {
// 		pClient, gerr = rpc.Dial("tcp", "127.0.0.1:7777")
// 	}
// 	return pClient

// }

// pClient, gerr = rpc.Dial("tcp", "127.0.0.1:7777")

func init_rpc() {

	if pClient == nil {
		fmt.Println("new")
		pClient, gerr = rpc.Dial("tcp", "127.0.0.1:7777")
		if gerr != nil {
			fmt.Println(gerr)
		}
	}
	// fmt.Println(pClient)

}
func DataController(w http.ResponseWriter, r *http.Request) {

	type Args struct {
		I int
	}
	type MyMethod int

	// type Grid struct {
	// 	Lists []PointGroup
	// }

	type PointGroup struct {
		Ciid  string
		Value string
		Aste  int
		Pv    int
		Time  string
	}
	w.Header().Set("Access-Control-Allow-Origin", "*")
	w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
	w.Header().Set("content-type", "application/json")
	// type Item struct {
	// 	Data []byte `json:uid`
	// 	// Username   string `json:username`
	// 	// Uepartment string `json:department`
	// 	// Ureated    string `json:created`
	// }
	// type Grid struct {
	// 	// Total int    `json:total`
	// 	Status int    `json:status`
	// 	Info   string `json:info`
	// 	Msg    []Item `json:product`
	// }
	init_rpc()
	var num_str string = r.FormValue("num")
	num := 0
	num, err := strconv.Atoi(num_str)
	if err != nil {
		num = 5
	}

	// if pClient == nil {
	// 	fmt.Println("123")
	// 	pClient, err := rpc.Dial("tcp", "127.0.0.1:7777")
	// }

	// fmt.Fprintf(os.Stderr, "pClient : %s\n", reflect.TypeOf(pClient))
	// if err != nil {
	// 	fmt.Fprintf(os.Stderr, "err : %s\n", err.Error())
	// 	return
	// }
	var multResult []PointGroup
	err = pClient.Call("MyMethod.DataSource", &Args{num}, &multResult)
	if err != nil {
		fmt.Fprintf(os.Stderr, "err : %s\n", err.Error())
		return
	}

	// <span style="white-space:pre">  defer pClient.Close()</span>
	// var temp_list []PointGroup
	// i := 1
	// j := 1
	// for i <= num {
	// 	for j <= 100 {
	// 		orderi := PointGroup{Ciid: strconv.Itoa(i) + "." + strconv.Itoa(j), Value: strconv.Itoa(rand.Intn(999)), Pv: rand.Intn(99999), Aste: 0, Time: time.Now().Format("2006-01-02 15:04:05")}
	// 		temp_list = append(temp_list, orderi)
	// 		j = j + 1
	// 	}
	// 	i = i + 1
	// 	j = 1
	// }
	// 同步RPC
	// var multResult []byte
	// var multResult []PointGroup
	// // nums := num
	// err = pClient.Call("MyMethod.DataSource", &Args{num}, &multResult)
	// if err != nil {
	// 	fmt.Fprintf(os.Stderr, "err : %s\n", err.Error())
	// 	return
	// }
	// var m Grid
	// m.Status = 0
	// m.Info = "ok"
	// orderi := Item{Data: multResult}
	// m.Msg = append(m.Msg, orderi)
	bytes, _ := json.Marshal(multResult)
	// fmt.Printf("json:m,%s\n", multResult)
	// bytes := []byte(`{"num":multResult}`)
	w.WriteHeader(http.StatusOK)
	w.Write(bytes)

}
